/**
 * creater:chuanpeng.zhu
 * create time:2016/3/9
 * describe：激光推送服务
 **/
APP.factory('JpushService', ['$http', '$window', '$rootScope', function ($http, $window, $rootScope) {
  var jpushServiceFactory = {};

  //启动极光推送
  var _init = function (openNotificationInAndroidCallback, setTagsWithAliasCallBack) {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.init();
    //打开推送消息事件处理
    //$window.plugins.jPushPlugin.openNotificationInAndroidCallback = openNotificationInAndroidCallback;
    document.addEventListener("jpush.openNotification", openNotificationInAndroidCallback, false);
    //设置tag和Alias触发事件处理
    $rootScope.$on('USER:REFLASH', setTagsWithAliasCallBack, false);

    $window.plugins.jPushPlugin.setDebugMode(true);
  };
  //获取状态
  var _isPushStopped = function (fun) {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.isPushStopped(fun)
  };
  //停止极光推送
  var _stopPush = function () {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.stopPush();
  };

  //重启极光推送
  var _resumePush = function () {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.resumePush();
  };

  /**
   * 设置标签和别名
   * tags:
   * 参数类型为数组。
   * nil 此次调用不设置此值。
   * 空集合表示取消之前的设置。
   * 每次调用至少设置一个 tag，覆盖之前的设置，不是新增。
   * 有效的标签组成：字母（区分大小写）、数字、下划线、汉字。
   * 限制：每个 tag 命名长度限制为 40 字节，最多支持设置 100 个 tag，但总长度不得超过1K字节（判断长度需采用 UTF-8 编码）。
   * 单个设备最多支持设置 100 个 tag，App 全局 tag 数量无限制。
   * alias:
   * 参数类型为字符串。
   * nil 此次调用不设置此值。
   * 空字符串 （""）表示取消之前的设置。
   * 有效的别名组成：字母（区分大小写）、数字、下划线、汉字。
   * 限制：alias 命名长度限制为 40 字节（判断长度需采用 UTF-8 编码）。
   */
  var _setTagsWithAlias = function (tags, alias) {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.setTagsWithAlias(tags, alias);
  };

  //设置标签
  var _setTags = function (tags) {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.setTags(tags);
  };

  //设置别名
  var _setAlias = function (alias) {
    if (!$window.plugins) {
      return;
    }
    $window.plugins.jPushPlugin.setAlias(alias);
  };


  jpushServiceFactory.init = _init;
  jpushServiceFactory.isPushStopped = _isPushStopped;
  jpushServiceFactory.stopPush = _stopPush;
  jpushServiceFactory.resumePush = _resumePush;

  jpushServiceFactory.setTagsWithAlias = _setTagsWithAlias;
  jpushServiceFactory.setTags = _setTags;
  jpushServiceFactory.setAlias = _setAlias;

  return jpushServiceFactory;
}]);
